import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let lifeData = {};
try {
	// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
	lifeData = uni.getStorageSync('lifeData');
} catch (e) {

}

// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = [
 'vuex_userInfo',
 'vuex_userAccountInfo',
 'vuex_token',
 'reloadMessageFlag',
 'vuex_loginParam',
 'vuex_app_config',
 'vuex_deviceMode',
 'currentPlaySong',
 'currentPlayer',
 'vuex_fileAssist',
 'vuex_linkedUsers',
 'vuex_yyyFriendList',
 "vuex_lastestZhuanFaUsers",
 "circleBgImg",
 "vuex_friendCircleUnreadCount"
 ];

// 保存变量到本地存储中
const saveLifeData = function(key, value) {
	// 判断变量名是否在需要存储的数组中
	if (saveStateKeys.indexOf(key) != -1) {
		// 获取本地存储的lifeData对象，将变量添加到对象中
		let tmp = uni.getStorageSync('lifeData');
		// 第一次打开APP，不存在lifeData变量，故放一个{}空对象
		tmp = tmp ? tmp : {};
		tmp[key] = value;
		// 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
		uni.setStorageSync('lifeData', tmp);
	}
}

const store = new Vuex.Store({
	state: {
	/**
	=====================不在saveStateKeys中定义=================
	=====================无需保存到本地【永久】存储，App退出即移除===============，
	*/	
		yyy_current_user:null,
		vuex_OSPlat:uni.getSystemInfoSync().platform,
		vuex_version: '1.0', //版本信息
		vuex_WSObj:null, //全局websocket对象
		vuex_currentChatGroupId:null, //当前会话中的群组ID
		vuex_deviceClientID:"",		 //APP手机clientId	
		vuex_reLogin:false,
	/**
	  ===============如果上面从本地获取的lifeData对象下有对应的属性，就赋值给state中对应的变量，====
	  ===============会【永久存储】，除非主动清除=================
	*/
		vuex_userInfo: lifeData.vuex_userInfo ? lifeData.vuex_userInfo : {}, //当前用户信息
		vuex_userAccountInfo:lifeData.vuex_userAccountInfo ? lifeData.vuex_userAccountInfo :null,
		vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',			//当前token信息
		//登录缓存信息
		vuex_loginParam:lifeData.vuex_loginParam ? lifeData.vuex_loginParam : { 
			mobile:'',
			password:'',
			avatar:'',
		},
		//登录后是否加载服务端信息记录的标志
		reloadMessageFlag: lifeData.reloadMessageFlag?lifeData.reloadMessageFlag:false,
		 //app的配置信息
		vuex_app_config:{ 
			shareURL:'http://im.qgi.me/index.html#/pages/tabbar/home',//分享的域名
			defaultGroupId:null,//默认官方群
			appAdministrator:'18174403058',//APP管理员
			logoIcon:'/static/image/login/login-icon.png',//登录图标
			appName:"Tomato"
		},
		//设备编号
		vuex_deviceMode:lifeData.vuex_deviceMode?lifeData.vuex_deviceMode:'',
		//当前播放的歌曲信息
		currentPlaySong:lifeData.currentPlaySong ? lifeData.currentPlaySong :null,
		currentPlayer:lifeData.currentPlayer ? lifeData.currentPlayer :{
			playState:false,
			progress:0,
			musicId:'',
			canPlay:false
		},
		vuex_yyyFriendList:lifeData.vuex_yyyFriendList?lifeData.vuex_yyyFriendList:[],//打招呼验证过的
		vuex_lastestZhuanFaUsers:lifeData.vuex_lastestZhuanFaUsers?lifeData.vuex_lastestZhuanFaUsers:[],//最近转发的
		//打招呼的人
		vuex_linkedUsers:lifeData.vuex_linkedUsers?lifeData.vuex_linkedUsers:[],
		//文件助手
		vuex_fileAssist:lifeData.vuex_fileAssist ? lifeData.vuex_fileAssist :{
			"lastMsgContent":"",
			"lastMsgTime":"",
			"messageList":[],
		},
		//朋友圈背景图片
		circleBgImg:lifeData.circleBgImg?lifeData.circleBgImg:require('@/static/image/find/circle/2.jpg'),
		//朋友圈展示信息
		circleData:lifeData.circleData?lifeData.circleData:[],
		vuex_friendCircleUnreadCount:lifeData.vuex_friendCircleUnreadCount?lifeData.vuex_friendCircleUnreadCount:0,
		//内置朋友圈相册banner图
		circleBgList:[
			{ src:require('@/static/image/find/circle/1.jpg'),isCheck:false },
			{ src:require('@/static/image/find/circle/2.jpg'),isCheck:false },
			{ src:require('@/static/image/find/circle/3.jpg'),isCheck:false },
			{ src:require('@/static/image/find/circle/4.jpg'),isCheck:false },
			{ src:require('@/static/image/find/circle/5.jpg'),isCheck:false },
			{ src:require('@/static/image/find/circle/6.jpg'),isCheck:false },
		],
	
	},
	mutations: {
		$uStore(state, payload) {
			// 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
			let nameArr = payload.name.split('.');
			let saveKey = '';
			let len = nameArr.length;
			if (nameArr.length >= 2) {
				let obj = state[nameArr[0]];
				for (let i = 1; i < len - 1; i++) {
					obj = obj[nameArr[i]];
				}
				obj[nameArr[len - 1]] = payload.value;
				saveKey = nameArr[0];
			} else {
				// 单层级变量，在state就是一个普通变量的情况
				state[payload.name] = payload.value;
				saveKey = payload.name;
			}
			// 保存变量到本地，见顶部函数定义
			saveLifeData(saveKey, state[saveKey])
		},
	},
})

export default store
